// plugins/generateVersion.ts
import { promises as fs } from 'fs';
import path from 'path';

export default function generateVersionPlugin() :any{
  return {
    name: 'generate-version', // 插件名称

    apply: 'build', // 仅在构建时运行

    async writeBundle() {
      try {
        // 获取插件所在目录的绝对路径
        const pluginPath = path.dirname(path.resolve(__dirname));

        // 构建 package.json 的绝对路径（假设 package.json 在项目根目录）
        const packageJsonPath = path.resolve(pluginPath, './package.json');

        // 检查 package.json 是否存在
        try {
          await fs.access(packageJsonPath);
        } catch {
          console.error(`找不到 package.json 文件，请确保它在路径: ${packageJsonPath}`);
          process.exit(1);
        }

        // 读取 package.json 内容
        const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');
        const packageJson = JSON.parse(packageJsonContent);

        // 生成新的版本号
        const date = new Date();
        const newVersion = `${date.getFullYear()}.${date.getMonth() + 1}.${date.getDate()}.${Date.now()}`;

        // （可选）更新 package.json 的版本号
        /*
        packageJson.version = newVersion;
        await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
        */

        // 构建 dist 目录的绝对路径
        const distPath = path.resolve(pluginPath, './dist');

        // 确保 dist 目录存在
        await fs.mkdir(distPath, { recursive: true });

        // 构建 version.json 的绝对路径
        const versionFilePath = path.resolve(distPath, 'version.json');

        // 写入 version.json 文件
        await fs.writeFile(
          versionFilePath,
          JSON.stringify({ version: newVersion }, null, 2),
          'utf-8'
        );

        console.log(`版本号已生成: ${newVersion}`);
      } catch (error) {
        console.error('生成 version.json 失败:', error);
      }
    },
  };
}